package com.wangp.mywrite.inwork.pattern._6._6_1_back_refer;

import com.wangp.mywrite.inwork.pattern.InitData;

/***
 * @author wangpeng
 * @since 2022-03-03  15:17
 */
public class BackRefer {

    /***
     * <Body>
     *   <h1>Welcome to my home page </h1>
     *   <p>Content is divided into two sections: </p>
     *   <H2>ColdFusion:</H2>
     *   <p> Information about Macromedia ColdFusion</p>
     *   <H3> Wireless: </H3>
     *   Information about Bluetooth,802.11, and more
     * </Body>
     */
    private void displayHtml() {
        // 所有标题文件全部查询出来
        String hReg = "<[Hh][1-6].*?</[Hh][1-6]>";
    }

    /***
     * <Body>
     *   <h1>Welcome to my home page </h1>
     *   <p>Content is divided into two sections: </p>
     *   <H2>ColdFusion:</H2>
     *   <p> Information about Macromedia ColdFusion</p>
     *   <H3> Wireless: </H3>
     *   Information about Bluetooth,802.11, and more
     *   <h2>This is not valid html </h3>
     * </Body>
     */
    private void displayValidHtml() {
        // 用以上的正则将非法的 html 标签 <h2> </h3> 给查出来了。这时候就要使用回溯引用来解决问题了
        // 先看 @see content()

        String hReg = "<([Hh][1-6]).*?</\\1>";
    }

    private void content(){
        // 假设你有一段文本，你想把这段文本里所有连续重复出现的单词（打字错误，其中有一个单词输了两遍）找出来。
        // 显然，在搜索某个单词的第二次出现时，这个单词必须是已知的。
        // 回溯引用允许正则表达式模式引用前面的匹配结果（具体到这个例子，就是前面匹配到的单词）。

        String content = "This is a block of of text, several words here are are repeated, and and they should not be.";

        // [ ]+ 匹配一个或多个空格  \w+ 匹配一个或多个字母数字字符 [ ]+ 匹配随后的空格。
        // 此处的 \w+ 是个子表达式，此子表达式是单独划分出来以便后面引用
        // \1 是一个回溯引用，引用的正式前面划分出来的那个子表达式，当 (\w+) 匹配到 of 时，\1 也匹配 of。
        // \1到底代表着什么？它代表着模式里的第1个子表达式，\2代表着第2个子表达式、\3代表着第3个；依次类推。于是，在上面那个例子里，[ ]+(\w+)[ ]+\1将匹配同一个单词的连续两次重复出现。
        String backReferReg = "[ ]+(\\w+)[ ]+\\1";
    }

    public static void main(String[] args) {

        String ipReg =  "((\\d{1,2})|(1\\d{2})|(2[0-4]\\d)|(25[0-5]))(\\.\\1){3}";
        System.out.println(InitData.filterByRegexPattern(InitData.IP_LIST,ipReg));;
    }

}
